package CONTROLADOR;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.table.TableModel;

import MODELO.ModeloCategoria;
import MODELO.ModeloIngrediente;
import MODELO.ModeloProducto;
import VISTA.frmProductos;

public class ControladorProductos implements ActionListener{
	private frmProductos frmProductos;
	private ModeloProducto modeloProducto;
	private Vector<ModeloIngrediente> ingredientes;
	private Vector<ModeloCategoria> categorias;
	
	public static void main(String[] args) {
		new ControladorProductos();
	}
    

	public ControladorProductos() {
		this.frmProductos = new frmProductos();
		this.frmProductos.setVisible(true);
		frmProductos.addListener(this);
		this.modeloProducto = new ModeloProducto();
		cargarTabla();
		cargarCombo();
	}
	private void cargarTabla() {
		TableModel m = frmProductos.getTblIngredientes().getModel();	
		int i =0;
		while(i< frmProductos.getTblIngredientes().getRowCount()) {
			m.setValueAt("", i, 0);
			m.setValueAt("", i, 1);
			i++;
		}
		ingredientes = new ModeloIngrediente().listar();
		i =0;
		for (ModeloIngrediente modelo: ingredientes) {
			m.setValueAt(modelo.getCodigo(), i, 0);
			m.setValueAt(modelo.getDescripcion(), i, 1);
			i++;
		}
		
	}
	
	private void cargarCombo() {
		frmProductos.getCmbCategoriaProducto().removeAllItems();
		categorias = new ModeloCategoria().listar();
		for (ModeloCategoria modelo: categorias) {
			frmProductos.getCmbCategoriaProducto().addItem(modelo.getDescripcion());
		}
		
	}

	@Override
	public void actionPerformed(ActionEvent evt) {
		if(evt.getActionCommand().equals("Cancelar")){
			frmProductos.limpiar();
		}
		else if(evt.getActionCommand().equals("OK")){
			if(!frmProductos.getTxtCodigoProducto().getText().isEmpty() && !frmProductos.getTxtDescripcionProducto().getText().isEmpty() && !frmProductos.getTxtPrecioProducto().getText().isEmpty())
			if(!frmProductos.contar())
			{
				modeloProducto.setCodigo(frmProductos.getTxtCodigoProducto().getText());
				modeloProducto.setDescripcion(frmProductos.getTxtDescripcionProducto().getText());
				modeloProducto.setStatus("A");
				modeloProducto.setPrecio(Double.parseDouble(frmProductos.getTxtPrecioProducto().getText()));
				if(modeloProducto.registar()){
					
					Vector<String> v = new Vector<String>();
					Vector<Double> c = new Vector<Double>();
					Vector<String []> vAux = frmProductos.getInfoTabla();
					for (String[] strings : vAux) {
						v.add(buscarIngrediente(strings[1]).getCodigo());
						c.add(Double.parseDouble(strings[2]));
						
					}
					modeloProducto.registarIngredientes(v, c);
					frmProductos.limpiar();
					frmProductos.mostrarMensaje("Producto registrado");
				}
				else
					frmProductos.mostrarMensaje("Codigo registrado");
			}
			else
				frmProductos.mostrarMensaje("No ha registrado ingredientes");
			else
				frmProductos.mostrarMensaje("Campos vacios");
		}
		else if(evt.getActionCommand().equals("Agregar")){
			if(frmProductos.getTblIngredientes().getSelectedRow()!=-1){
			String des = (String)frmProductos.getTblIngredientes().getValueAt(frmProductos.getTblIngredientes().getSelectedRow(), 1);
			frmProductos.agregar(buscarIngrediente(des));
			}
			else
				frmProductos.mostrarMensaje("Selecionar un Imgrediente");
			
		}
		else if(evt.getActionCommand().equals("Quitar")){
			frmProductos.quitar();
		
		}
		
		
	}
	
	public ModeloCategoria buscarCategoria(String descripicion){
        for (int i = 0; i < categorias.size(); i++)
            if(categorias.elementAt(i).getDescripcion().equals(descripicion))
                return categorias.elementAt(i);
        return null;
     }
     
     public ModeloIngrediente buscarIngrediente(String descripicion){
        for (int i = 0; i < ingredientes.size(); i++){
        	if(ingredientes.elementAt(i).getDescripcion().equals(descripicion))
                return ingredientes.elementAt(i);
        }return null;
     }  
	

}
